package src.upc.condominio;
import java.util.*;

@SuppressWarnings("deprecation")
public class Administrador {

	private ArrayList<Residente> residentes;
	private ArrayList<Vivienda> viviendas;
	private ArrayList<Cuota> cuotas;
	
	public Administrador(){
		residentes = new ArrayList<Residente>();
		viviendas = new ArrayList<Vivienda>();
		cuotas = new ArrayList<Cuota>();
	}
	
	public ArrayList<Residente> getResidentes(){
		return residentes;
	}
	
	public ArrayList<Vivienda> getViviendas() {
		return viviendas;
	}
	
	public ArrayList<Cuota> getCuotas(String edificio, int numero) {
		ArrayList<Cuota> lasCuotas = new ArrayList<Cuota>();
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero){
				lasCuotas.add(cuota);
			}
		}
		return lasCuotas;
	}
	
	public ArrayList<Cuota> getCuotasPorPagar(String edificio, int numero) {
		ArrayList<Cuota> lasCuotas = new ArrayList<Cuota>();
		Date date = new Date();
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero && cuota.getPagado().equals("0")){
				if(cuota.getAnioVencimientoCuota()>date.getYear()){
					if(cuota.getMesVencimientoCuota()>date.getMonth()){
						if(cuota.getDiaVencimientoCuota()>=date.getDay()){
							lasCuotas.add(cuota);
						}
					}
				}
			}
		}
		return lasCuotas;
	}
	
	public ArrayList<Cuota> getCuotasVencidas(String edificio, int numero) {
		ArrayList<Cuota> lasCuotas = new ArrayList<Cuota>();
		Date date = new Date();
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero && cuota.getPagado().equals("0")){
				if(cuota.getAnioVencimientoCuota()<=date.getYear()){
					if(cuota.getMesVencimientoCuota()<=date.getMonth()){
						if(cuota.getDiaVencimientoCuota()<date.getDay()){
							lasCuotas.add(cuota);
						}
					}
				}
			}
		}
		return lasCuotas;
	}
	
	public ArrayList<Cuota> getCuotasPagadas(String edificio, int numero) {
		ArrayList<Cuota> lasCuotas = new ArrayList<Cuota>();
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero && cuota.getPagado().equals("1")){
				lasCuotas.add(cuota);
			}
		}
		return lasCuotas;
	}

	public void registrarResidente(String dni, String nombre, String apellidos, int edad, String correo, String claveacceso) {
		boolean flag = false;
		for(Residente residente : residentes){
			if(residente.getDni().equals(dni)){
				flag=true;
			}
		}
		
		for(Residente residente : residentes){
			if(residente.getCorreo().equals(correo)){
				flag=true;
			}
		}
		
		if(flag){
			throw new RuntimeException();
		}
		
		Residente residente = new Residente(dni,nombre,apellidos,edad,correo,claveacceso);	
		residentes.add(residente);		
			
	}

	public void registrarVivienda(String edificio, int numero, double metraje, String tipo, int dpto, String propietario) {
		boolean flag = false;
		for(Vivienda vivienda : viviendas){
			if(vivienda.getEdificio().equals(edificio) && vivienda.getNumero()==numero){
				flag=true;
			}
		}
				
		if(flag){
			throw new RuntimeException();
		}
		
		Vivienda vivienda = new Vivienda(edificio,numero,metraje,tipo,dpto,propietario);
		viviendas.add(vivienda);
	}

	public void colocarCuota(String edificio, int numero, int mesCuota, int anioCuota, double importe, int diaVencimientoCuota, int mesVencimientoCuota, int anioVencimientoCuota) {
		boolean flag = false;
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero && cuota.getMesCuota()==mesCuota && cuota.getAnioCuota()==anioCuota){
				flag = true;
			}
		}
		
		if(flag){
			throw new RuntimeException();
		}
		
		Cuota cuota = new Cuota(edificio,numero,mesCuota,anioCuota,importe,diaVencimientoCuota,mesVencimientoCuota,anioVencimientoCuota);
		cuotas.add(cuota);
	}
	
	public void pagarCuota(String edificio, int numero, int mesCuota, int anioCuota, String tipoPago) {
		boolean flag = false;
		Date date = new Date();
		for(Cuota cuota : cuotas){
			if(cuota.getEdificio().equals(edificio) && cuota.getNumero()==numero && cuota.getMesCuota()==mesCuota && cuota.getAnioCuota()==anioCuota){
				flag = true;
				cuota.setDiaPagadoCuota(date.getDay());
				cuota.setMesPagadoCuota(date.getMonth());
				cuota.setAnioPagadoCuota(date.getYear());
				cuota.setTipoPago(tipoPago);
				cuota.setPagado("1");
			}
		}	
		if(!flag){
			throw new RuntimeException();
		}
	}

}
